package com.wujing.scalatrait

/**
 * 叠加特质
 *
 *
 * 特质声明的顺序是从左到又 执行的顺序是从右至左
 * 混入多个特质
 *
 *
 */
object TraitDemo02 {
  def main(args: Array[String]): Unit = {
    //创建mysql 实例时，动态混入了db4
    //创建的对象的顺序scala 在叠加特质的时候，首先从后面开始执行
    //    this is operate 4
    //    this is data 4
    //    this is db
    //    this is file
    val mysql = new Mysql with Db4 with File4
    mysql.insert(100)

  }
}

trait Operate4{
  println("this is operate 4")
  def insert(id:Int)
}


trait Data4 extends Operate4{
  println("this is data 4")
  override def insert(id: Int): Unit = {
    println("insert id="+id)
  }
}


trait Db4 extends Data4 {
  println("this is db")
  override def insert(id: Int): Unit = {
    println("db insert 4="+id)
    super.insert(id)
  }
}


trait File4 extends Data4{

  println("this is file")
  override def insert(id: Int): Unit = {
    println("file insert=="+id)
//    super.insert(id)
    //说明：super[？]的类型，必须时新特质的父超类
    super[Data4].insert(id)
  }
}

//这种类型的特质就是富接口
trait Operate6{
  def insert(int: Int)
  def intInsert(int: Int): Unit ={
    println("打印数字="+int)
  }
}

class Mysql {}